#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<netdb.h>
#include<unistd.h>
#include<pthread.h>
#include<signal.h>



// 定义以太网头结构体
struct nty_ethhdr
{
    unsigned char mac_dest[6]; // 目的MAC地址
    unsigned char mac_src[6];  // 源MAC地址
    unsigned short eth_type;    // 以太网类型
};

// 定义IPv4头结构体
struct nty_ipv4hdr
{
    unsigned char version:4;       // 版本
    unsigned char ip_hdr_len:4;    // IP头长度
    unsigned char tos;              // 服务类型
    unsigned short total_len;       // 总长度
    unsigned short id;              // 标识符
    unsigned short frag_off;        // 分段偏移
    unsigned char ttl;              // 生存时间
    unsigned char protocol;         // 协议
    unsigned short check;           // 校验和
    unsigned int src_addr;             // 源地址
    unsigned int dest_addr;             // 目标地址
};
/**************************************************** 
 * 结构体 nty_udphdr 用于表示 UDP 头部分 
 ****************************************************/
struct nty_udphdr
{
    unsigned short sport;  // 源端口
    unsigned short dport;  // 目标端口
    unsigned short len;    // UDP 数据段长度
    unsigned short check;   // 校验和
};

/******************************************
 * nty_udppkt 结构体
 * 描述用户数据报协议（UDP）数据包的结构，包括以太网头、IPv4头和UDP头。
 ******************************************/
struct nty_udppkt
{
    struct nty_ethhdr eth_hdr;  // 以太网头部
    struct nty_ipv4hdr ip_hdr;   // IPv4头部
    struct nty_udphdr udp_hdr;   // UDP头部
    char data[0];                 // 包含数据的可变长度数组
};


struct FlexibleArray {
    int length;
    char array[]; // 柔性数组
};
int main()
{
    int n =10;
    struct FlexibleArray* arr = (struct FlexibleArray*)malloc(sizeof(struct FlexibleArray) + n * sizeof(char));
    arr->length = n;
   


    printf("size of arr: %ld\n", sizeof(*arr));
}